package backed.service.impl;

import backed.entity.User;
import backed.repository.UserRepository;
import backed.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;

@Service
public class UserServiceImpl implements UserService {
    
    @Autowired
    private UserRepository userRepository;

    @Override
    public User rqmoney(Long userId, Double money) {
        if(userId == null){
            return null;
        }
        User user = userRepository.findById(userId).orElse(null);
        if(user == null){
            return null;
        }
        // 累加 money：获取当前余额并加上新的金额
        BigDecimal currentMoney = user.getMoney() != null ? user.getMoney() : BigDecimal.ZERO;
        BigDecimal newMoney = currentMoney.add(BigDecimal.valueOf(money));
        user.setMoney(newMoney);
        User savedUser = userRepository.save(user);
        System.out.println("用户ID: " + userId + ", 原余额: " + currentMoney + ", 增加: " + money + ", 新余额: " + savedUser.getMoney());
        return savedUser;
    }

    @Override
    public User login(String account, String password) {
        return userRepository.findByAccountAndPassword(account, password);
    }
    
    @Override
    public User register(String account, String password) {
        if (userRepository.findByAccount(account) != null) {
            return null;
        }
        User user = new User();
        user.setAccount(account);
        user.setPassword(password);
        return userRepository.save(user);
    }
    
    @Override
    public User getUserInfo(Long id) {
        return userRepository.findById(id).orElse(null);
    }

    @Override
    public User update(User user) {
        // 检查用户是否存在
        if (!userRepository.existsById(user.getId())) {
            return null;
        }
        // 更新用户信息（JPA会自动处理更新操作）
        return userRepository.save(user);
    }

    @Override
    public int getUserRankByCarbonPoints(Long userId) {
        // 获取用户的碳积分
        User user = userRepository.findById(userId).orElse(null);
        if (user == null) {
            return -1;
        }

        // 查询碳积分比当前用户高的用户数量，加1就是当前用户的排名
        Integer carbonPoints = user.getCarbonPoints();
        Long higherRankedCount = userRepository.countByCarbonPointsGreaterThan(carbonPoints);

        return higherRankedCount.intValue() + 1;
    }

    /**
     * 修改密码
     * 步骤：
     * 1. 根据userId查找用户
     * 2. 验证原密码是否正确
     * 3. 如果正确，更新为新密码
     * 4. 如果错误，返回false
     */
    @Override
    public boolean changePassword(Long userId, String oldPassword, String newPassword) {
        // 步骤1：查找用户
        User user = userRepository.findById(userId).orElse(null);
        if (user == null) {
            return false;  // 用户不存在
        }

        // 步骤2：验证原密码是否正确
        if (!user.getPassword().equals(oldPassword)) {
            return false;  // 原密码错误
        }

        // 步骤3：更新为新密码
        user.setPassword(newPassword);
        userRepository.save(user);
        return true;  // 修改成功
    }
}